<?php
/* $Id$ */
/*
	interfaces.php
	Copyright (C) 2004-2008 Scott Ullrich
	Copyright (C) 2006 Daniel S. Haischt.
	Copyright (C) 2008 Ermal Lu�i
	All rights reserved.

	originally part of m0n0wall (http://m0n0.ch/wall)
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
	All rights reserved.

	Redistribution and use in source and binary forms, with or without
	modification, are permitted provided that the following conditions are met:

	1. Redistributions of source code must retain the above copyright notice,
	   this list of conditions and the following disclaimer.

	2. Redistributions in binary form must reproduce the above copyright
	   notice, this list of conditions and the following disclaimer in the
	   documentation and/or other materials provided with the distribution.

	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
	POSSIBILITY OF SUCH DAMAGE.
*/

##|+PRIV
##|*IDENT=page-interfaces
##|*NAME=Interfaces: WAN page
##|*DESCR=Allow access to the 'Interfaces' page.
##|*MATCH=interfaces.php*
##|-PRIV

require("guiconfig.inc");

if ($_REQUEST['if'])
	$if = $_REQUEST['if'];
else
	$if = "wan";

define("CRON_PPPOE_CMD_FILE", "/conf/pppoe{$if}restart");
define("CRON_MONTHLY_PATTERN", "0 0 1 * *");
define("CRON_WEEKLY_PATTERN", "0 0 * * 0");
define("CRON_DAILY_PATTERN", "0 0 * * *");
define("CRON_HOURLY_PATTERN", "0 * * * *");

function getMPDCRONSettings() {
  global $config;
  if (is_array($config['cron']['item'])) {
    for ($i = 0; $i < count($config['cron']['item']); $i++) {
      $item = $config['cron']['item'][$i];
      if (strpos($item['command'], CRON_PPPOE_CMD_FILE) !== false) {
        return array("ID" => $i, "ITEM" => $item);
      }
    }
  }
  return NULL;
}

function getMPDResetTimeFromConfig() {
	$itemhash = getMPDCRONSettings();
	$cronitem = $itemhash['ITEM'];
	if (isset($cronitem)) 
		return "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}";
	else 
		return NULL;
}

function remove_bad_chars($string) {
	return preg_replace('/[^a-z|_|0-9]/i','',$string);
}

if (!is_array($config['gateways']['gateway_item']))
	$config['gateways']['gateway_item'] = array();

$a_gateways = &$config['gateways']['gateway_item'];

$wancfg = &$config['interfaces'][$if];

$pconfig['pppoe_username'] = $wancfg['pppoe_username'];
$pconfig['pppoe_password'] = $wancfg['pppoe_password'];
$pconfig['provider'] = $wancfg['provider'];
$pconfig['pppoe_dialmethod'] = $wancfg['dialmethod'];
$pconfig['pppoe_idletimeout'] = $wancfg['timeout'];

/* ================================================ */
/* = force a connection reset at a specific time? = */
/* ================================================ */

if (isset($wancfg['pppoe']['pppoe-reset-type'])) {
	$resetTime = getMPDResetTimeFromConfig();  
	$pconfig['pppoe_preset'] = true;
	if ($wancfg['pppoe']['pppoe-reset-type'] == "custom") {
		$resetTime_a = split(" ", $resetTime);
		$pconfig['pppoe_pr_custom'] = true;
		$pconfig['pppoe_resetminute'] = $resetTime_a[0];
		$pconfig['pppoe_resethour'] = $resetTime_a[1];
		/*  just initialize $pconfig['pppoe_resetdate'] if the
		 *  coresponding item contains appropriate numeric values.
		 */
		if ($resetTime_a[2] <> "*" && $resetTime_a[3] <> "*") 
			$pconfig['pppoe_resetdate'] = "{$resetTime_a[3]}/{$resetTime_a[2]}/" . date("Y");
	} else if ($wancfg['pppoe']['pppoe-reset-type'] == "preset") {
		$pconfig['pppoe_pr_preset'] = true;
		switch ($resetTime) {
			case CRON_MONTHLY_PATTERN:
				$pconfig['pppoe_monthly'] = true;
				break;
			case CRON_WEEKLY_PATTERN:
				$pconfig['pppoe_weekly'] = true;
				break;
			case CRON_DAILY_PATTERN:
				$pconfig['pppoe_daily'] = true;
				break;
			case CRON_HOURLY_PATTERN:
				$pconfig['pppoe_hourly'] = true;
				break;
		}
	}
}

$pconfig['pptp_username'] = $wancfg['pptp_username'];
$pconfig['pptp_password'] = $wancfg['pptp_password'];
$pconfig['pptp_local'] = $wancfg['local'];
$pconfig['pptp_subnet'] = $wancfg['subnet'];
$pconfig['pptp_remote'] = $wancfg['remote'];
$pconfig['pppoe_dialondemand'] = isset($wancfg['ondemand']);
$pconfig['pptp_idletimeout'] = $wancfg['timeout'];

$pconfig['dhcphostname'] = $wancfg['dhcphostname'];
$pconfig['alias-address'] = $wancfg['alias-address'];
$pconfig['alias-subnet'] = $wancfg['alias-subnet'];

// Populate page descr if it does not exist.
if($if == "wan" && !$wancfg['descr'])
	$wancfg['descr'] = "WAN";
else if ($if == "lan" && !$wancfg['descr'])
	$wancfg['descr'] = "LAN";
$pconfig['descr'] = remove_bad_chars($wancfg['descr']);

if ($if == "wan" || $if == "lan")
	$pconfig['enable'] = true;
else
	$pconfig['enable'] = isset($wancfg['enable']);

if (is_array($config['aliases']['alias']))
foreach($config['aliases']['alias'] as $alias)
	if($alias['name'] == $wancfg['descr'])
		$input_errors[] = gettext("抱歉，别名 {$wancfg['descr']} 已经存在。");
if ($wancfg['ipaddr'] == "dhcp") {
	$pconfig['type'] = "dhcp";
} else if ($wancfg['ipaddr'] == "carpdev-dhcp") {
	$pconfig['type'] = "carpdev-dhcp";
	$pconfig['ipaddr'] = "";	    
} else if ($wancfg['ipaddr'] == "pppoe") {
	$pconfig['type'] = "pppoe";
} else if ($wancfg['ipaddr'] == "pptp") {
	$pconfig['type'] = "pptp";
} else if ($wancfg['ipaddr'] != "") {
	$pconfig['type'] = "static";
	$pconfig['ipaddr'] = $wancfg['ipaddr'];
	$pconfig['subnet'] = $wancfg['subnet'];
	$pconfig['gateway'] = $wancfg['gateway'];
	$pconfig['pointtopoint'] = $wancfg['pointtopoint'];
} else
	$pconfig['type'] = "none";

$pconfig['blockpriv'] = isset($wancfg['blockpriv']);
$pconfig['blockbogons'] = isset($wancfg['blockbogons']);
$pconfig['blockouter'] = isset($wancfg['blockouter']);
$pconfig['spoofmac'] = $wancfg['spoofmac'];
$pconfig['mtu'] = $wancfg['mtu'];

/* Wireless interface? */
if (isset($wancfg['wireless'])) {
	/* Get wireless modes */
	$curif = convert_friendly_interface_to_real_interface_name($if);
	$wl_modes = get_wireless_modes($curif);
	$pconfig['standard'] = $wancfg['wireless']['standard'];
	$pconfig['mode'] = $wancfg['wireless']['mode'];
	$pconfig['protmode'] = $wancfg['wireless']['protmode'];
	$pconfig['ssid'] = $wancfg['wireless']['ssid'];
	$pconfig['channel'] = $wancfg['wireless']['channel'];
	$pconfig['txpower'] = $wancfg['wireless']['txpower'];
	$pconfig['distance'] = $wancfg['wireless']['distance'];
	$pconfig['wme_enable'] = isset($wancfg['wireless']['wme']['enable']);
	$pconfig['pureg_enable'] = isset($wancfg['wireless']['pureg']['enable']);
	$pconfig['apbridge_enable'] = isset($wancfg['wireless']['apbridge']['enable']);
	$pconfig['authmode'] = $wancfg['wireless']['authmode'];
	$pconfig['hidessid_enable'] = isset($wancfg['wireless']['hidessid']['enable']);
	if (is_array($wancfg['wireless']['wpa'])) {
		$pconfig['debug_mode'] = $wancfg['wireless']['wpa']['debug_mode'];
		$pconfig['macaddr_acl'] = $wancfg['wireless']['wpa']['macaddr_acl'];
		$pconfig['mac_acl_enable'] = isset($wancfg['wireless']['wpa']['mac_acl_enable']);
		$pconfig['auth_algs'] = $wancfg['wireless']['wpa']['auth_algs'];
		$pconfig['wpa_mode'] = $wancfg['wireless']['wpa']['wpa_mode'];
		$pconfig['wpa_key_mgmt'] = $wancfg['wireless']['wpa']['wpa_key_mgmt'];
		$pconfig['wpa_pairwise'] = $wancfg['wireless']['wpa']['wpa_pairwise'];
		$pconfig['wpa_group_rekey'] = $wancfg['wireless']['wpa']['wpa_group_rekey'];
		$pconfig['wpa_gmk_rekey'] = $wancfg['wireless']['wpa']['wpa_gmk_rekey'];
		$pconfig['wpa_strict_rekey'] = isset($wancfg['wireless']['wpa']['wpa_strict_rekey']);
		$pconfig['passphrase'] = $wancfg['wireless']['wpa']['passphrase'];
		$pconfig['ieee8021x'] = isset($wancfg['wireless']['wpa']['ieee8021x']['enable']);
		$pconfig['ext_wpa_sw'] = $wancfg['wireless']['wpa']['ext_wpa_sw'];
		$pconfig['wpa_enable'] = isset($wancfg['wireless']['wpa']['enable']);
	}
	$pconfig['wep_enable'] = isset($wancfg['wireless']['wep']['enable']);
	$pconfig['mac_acl'] = $wancfg['wireless']['mac_acl'];
	if (is_array($wancfg['wireless']['wep']) && is_array($wancfg['wireless']['wep']['key'])) {
		$i = 1;
		foreach ($wancfg['wireless']['wep']['key'] as $wepkey) {
			$pconfig['key' . $i] = $wepkey['value'];
			if (isset($wepkey['txkey']))
				$pconfig['txkey'] = $i;
			$i++;
		}
		if (!isset($wepkey['txkey']))
			$pconfig['txkey'] = 1;
	}
}

if ($_POST['apply']) {
	unset($input_errors);
	if (!file_exists($d_landirty_path))
		$intput_errors[] = "您已经应用了您的设置。";
	else {	
		unlink_if_exists("{$g['tmp_path']}/config.cache");
		unlink_if_exists("{$d_landirty_path}");
		interface_configure($if);
		reset_carp();
		/* restart snmp so that it binds to correct address */		
		services_snmpd_configure();		
		if ($if == "lan") 		
			$savemsg = "设置已更改，您需要更改您访问web配置界面的IP地址。";
		/* sync filter configuration */
		config_lock();
		setup_gateways_monitor();
		if (file_exists($d_staticroutesdirty_path)) 
			unlink($d_staticroutesdirty_path);
		config_unlock();
		filter_configure();
		/* set up static routes */
		system_routing_configure();
		/* start IPsec tunnels */
		vpn_ipsec_configure();
	}
	header("Location: interfaces.php?if={$if}");
	exit;
}

if ($_POST && $_POST['enable'] == "no") {
	unset($wancfg['enable']);
	interface_bring_down($if);
	write_config("接口 {$_POST['descr']}({$if}) 已禁用");
	touch($d_landirty_path);
	header("Location: interfaces.php?if={$if}");
	exit;
}

if ($_POST) {
	unset($input_errors);
	$pconfig = $_POST;
	conf_mount_rw();
	/* filter out spaces from descriptions  */
	$_POST['descr'] = remove_bad_chars($_POST['descr']);
	/* okay first of all, cause we are just hidding the PPPoE HTML
	 * fields releated to PPPoE resets, we are going to unset $_POST
	 * vars, if the reset feature should not be used. Otherwise the
	 * data validation procedure below, may trigger a false error
	 * message.
	 */
	if (empty($_POST['pppoe_preset'])) {
		unset($_POST['pppoe_pr_type']);                
		unset($_POST['pppoe_resethour']);
		unset($_POST['pppoe_resetminute']);
		unset($_POST['pppoe_resetdate']);
		unset($_POST['pppoe_pr_preset_val']);
	}
	/* optional interface if list */
	$iflist = get_configured_interface_with_descr();
	/* description unique? */
	foreach ($iflist as $ifent => $ifdescr) {
		if ($if != $ifent && $ifdescr == $_POST['descr'])
			$input_errors[] = "该名称的接口已存在";
	}
	/* input validation */
	if ($_POST['type'] == "static" && $if != 'wan') {
		$reqdfields = explode(" ", "ipaddr subnet");
		$reqdfieldsn = explode(",", "IP地址,子网掩码");
		do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
	} else if ($_POST['type'] == "static") {
		$reqdfields = explode(" ", "ipaddr subnet gateway");
		$reqdfieldsn = explode(",", "IP地址,子网掩码");
		do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
	} else if ($_POST['type'] == "PPPoE") {
		if ($_POST['pppoe_dialondemand']) {
			$reqdfields = explode(" ", "pppoe_username pppoe_password pppoe_dialondemand pppoe_idletimeout");
			$reqdfieldsn = explode(",", "PPPoE用户名,PPPoE密码,按需拨号,空闲断线");
		} else {
			$reqdfields = explode(" ", "pppoe_username pppoe_password");
			$reqdfieldsn = explode(",", "PPPoE用户名,PPPoE密码");
		}
		do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
	} else if ($_POST['type'] == "PPTP") {
		if ($_POST['pptp_dialondemand']) {
			$reqdfields = explode(" ", "pptp_username pptp_password pptp_local pptp_subnet pptp_remote pptp_dialondemand pptp_idletimeout");
			$reqdfieldsn = explode(",", "PPTP用户名,PPTP密码,PPTP本地IP地址,PPTP子网,PPTP远程IP地址,按需拨号,空闲断线");
		} else {
			$reqdfields = explode(" ", "pptp_username pptp_password pptp_local pptp_subnet pptp_remote");
			$reqdfieldsn = explode(",", "PPTP用户名,PPTP密码,PPTP本地IP地址,PPTP子网,PPTP远程IP地址");
		}
		do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
	}
	/* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
	$_POST['spoofmac'] = strtolower(str_replace("-", ":", $_POST['spoofmac']));
	if (($_POST['ipaddr'] && !is_ipaddr($_POST['ipaddr']))) 
		$input_errors[] = "请输入有效的IP地址。";
	if (($_POST['subnet'] && !is_numeric($_POST['subnet']))) 
		$input_errors[] = "请输入有效的子网掩码。";
	if (($_POST['alias-address'] && !is_ipaddr($_POST['alias-address']))) 
		$input_errors[] = "请为IP alias输入有效的IP地址。";
	if (($_POST['alias-subnet'] && !is_numeric($_POST['alias-subnet']))) 
		$input_errors[] = "请为IP alias输入有效的子网掩码。";
	if ($_POST['gateway'] && !is_ipaddr($_POST['gateway']))
		$input_errors[] = "请输入有效的网关。";
	if (($_POST['pointtopoint'] && !is_ipaddr($_POST['pointtopoint']))) 
		$input_errors[] = "请输入有效的点对点IP地址";
	if (($_POST['provider'] && !is_domain($_POST['provider']))) 
		$input_errors[] = "服务名称含有非法字符。";
	if (($_POST['pppoe_idletimeout'] != "") && !is_numericint($_POST['pppoe_idletimeout'])) 
		$input_errors[] = "空闲时间必须是整数。";
	if ($_POST['pppoe_resethour'] <> "" && !is_numericint($_POST['pppoe_resethour']) && 
		$_POST['pppoe_resethour'] >= 0 && $_POST['pppoe_resethour'] <=23) 
			$input_errors[] = gettext("有效的PPPoE重置时数为(0-23)。");
	if ($_POST['pppoe_resetminute'] <> "" && !is_numericint($_POST['pppoe_resetminute']) && 
		$_POST['pppoe_resetminute'] >= 0 && $_POST['pppoe_resetminute'] <=59) 
			$input_errors[] = gettext("有效的PPPoE重置分数为(0-59)。");
	if ($_POST['pppoe_resetdate'] <> "" && !is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) 
		$input_errors[] = gettext("有效的PPPoE重置日期必须是(mm/dd/yyyy)。");
	if (($_POST['pptp_local'] && !is_ipaddr($_POST['pptp_local']))) 
		$input_errors[] = "请输入有效的PPTP本地IP地址。";
	if (($_POST['pptp_subnet'] && !is_numeric($_POST['pptp_subnet']))) 
		$input_errors[] = "请输入有效的PPTP子网掩码。";
	if (($_POST['pptp_remote'] && !is_ipaddr($_POST['pptp_remote']))) 
		$input_errors[] = "请输入有效的PPTP远程IP地址。";
	if (($_POST['pptp_idletimeout'] != "") && !is_numericint($_POST['pptp_idletimeout'])) 
		$input_errors[] = "空闲时间必须是整数。";
	if (($_POST['spoofmac'] && !is_macaddr($_POST['spoofmac']))) 
		$input_errors[] = "请输入有效的MAC地址。";
	if ($_POST['mtu'] && ($_POST['mtu'] < 576)) 
		$input_errors[] = "MTU值必须大于576字节。";
	/* Wireless interface? */
	if (isset($wancfg['wireless'])) {
		$reqdfields = explode(" ", "mode ssid");
		$reqdfieldsn = explode(",", "Mode,SSID");
		do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
		/* loop through keys and enforce size */
		for ($i = 1; $i <= 4; $i++) {
			if ($_POST['key' . $i]) {
				/* 64 bit */
				if (strlen($_POST['key' . $i]) == 5)
					continue;
				if (strlen($_POST['key' . $i]) == 10) {
					/* hex key */
					if (stristr($_POST['key' . $i], "0x") == false) {
						$_POST['key' . $i] = "0x" . $_POST['key' . $i];
					}
					continue;
				}
				if (strlen($_POST['key' . $i]) == 12) {
					/* hex key */
					if(stristr($_POST['key' . $i], "0x") == false) {
					$_POST['key' . $i] = "0x" . $_POST['key' . $i];
					}
					continue;
				}
				/* 128 bit */
				if (strlen($_POST['key' . $i]) == 13)
					continue;
				if (strlen($_POST['key' . $i]) == 26) {
					/* hex key */
					if (stristr($_POST['key' . $i], "0x") == false)
						$_POST['key' . $i] = "0x" . $_POST['key' . $i];
					continue;
				}
				if(strlen($_POST['key' . $i]) == 28)
					continue;
				$input_errors[] =  "Invalid wep key size.   Sizes should be 40 (64) bit keys or 104 (128) bit.";
				break;
			}
		}
	}
	if (!$input_errors) {
		unset($wancfg['ipaddr']);
		unset($wancfg['subnet']);
		unset($wancfg['gateway']);
		unset($wancfg['pointtopoint']);
		unset($wancfg['dhcphostname']);
		unset($wancfg['pppoe_username']);
		unset($wancfg['pppoe_password']);
		unset($wancfg['pptp_username']);
		unset($wancfg['pptp_password']);
		unset($wancfg['provider']);
		unset($wancfg['timeout']);
		unset($wancfg['dialmethod']);
		if ($wancfg['pppoe']['pppoe-reset-type'])
			unset($wancfg['pppoe']['pppoe-reset-type']);
		unset($wancfg['local']);
		unset($wancfg['subnet']);
		unset($wancfg['remote']);

		$wancfg['descr'] = remove_bad_chars($_POST['descr']);
		if ($if == "wan" || $if == "lan")
			$wancfg['enable'] = true;
		else
			$wancfg['enable'] =  $_POST['enable']  == "yes" ? true : false;
		if ($_POST['type'] == "static") {
			$wancfg['ipaddr'] = $_POST['ipaddr'];
			$wancfg['subnet'] = $_POST['subnet'];
			if ($_POST['gateway'] != "none")
				$wancfg['gateway'] = $_POST['gateway'];
			if (isset($wancfg['ispointtopoint']))
				$wancfg['pointtopoint'] = $_POST['pointtopoint'];
		} else if ($_POST['type'] == "dhcp") {
			$wancfg['ipaddr'] = "dhcp";
			$wancfg['dhcphostname'] = $_POST['dhcphostname'];
			$wancfg['alias-address'] = $_POST['alias-address'];
			$wancfg['alias-subnet'] = $_POST['alias-subnet'];
		} else if ($_POST['type'] == "carpdev-dhcp") {
			$wancfg['ipaddr'] = "carpdev-dhcp";
			$wancfg['dhcphostname'] = $_POST['dhcphostname'];
			$wancfg['alias-address'] = $_POST['alias-address'];
			$wancfg['alias-subnet'] = $_POST['alias-subnet'];			
		} else if ($_POST['type'] == "pppoe") {
			$wancfg['ipaddr'] = "pppoe";
			$wancfg['pppoe_username'] = $_POST['pppoe_username'];
			$wancfg['pppoe_password'] = $_POST['pppoe_password'];
			$wancfg['provider'] = $_POST['provider'];
			$wancfg['dialmethod'] = $_POST['pppoe_dialmethod'];
			$wancfg['timeout'] = $_POST['pppoe_idletimeout'];
		} else if ($_POST['type'] == "pptp") {
			$wancfg['ipaddr'] = "pptp";
			$wancfg['pptp_username'] = $_POST['pptp_username'];
			$wancfg['pptp_password'] = $_POST['pptp_password'];
			$wancfg['local'] = $_POST['pptp_local'];
			$wancfg['subnet'] = $_POST['pptp_subnet'];
			$wancfg['remote'] = $_POST['pptp_remote'];
			$wancfg['ondemand'] = $_POST['pptp_dialondemand'] ? true : false;
			$wancfg['timeout'] = $_POST['pptp_idletimeout'];
		}
		handle_pppoe_reset();
		/* reset cron items if necessary */
		if (empty($_POST['pppoe_preset'])) {
			/* test whether a cron item exists and unset() it if necessary */
			$itemhash = getMPDCRONSettings();
			$item = $itemhash['ITEM'];
			if (isset($item))
				unset($config['cron']['item'][$itemhash['ID']]); 
		}
		if($_POST['blockpriv'] == "yes")
			$wancfg['blockpriv'] = true;
		else
			unset($wancfg['blockpriv']);
		if($_POST['blockbogons'] == "yes")
			$wancfg['blockbogons'] = true;
		else
			unset($wancfg['blockbogons']);
        if($_POST['blockouter'] == "yes")
            $wancfg['blockouter'] = true;
        else
            unset($wancfg['blockouter']);			
		$wancfg['spoofmac'] = $_POST['spoofmac'];
		$wancfg['mtu'] = $_POST['mtu'];
		if (isset($wancfg['wireless'])) 
			handle_wireless_post();
		write_config();
		touch($d_landirty_path);
		/* regenerate cron settings/crontab file */
		configure_cron();
		conf_mount_ro();
		header("Location: interfaces.php?if={$if}");
		exit;
	}
} // end if($_POST) 

function handle_pppoe_reset() {
	global $_POST, $config, $g, $wancfg, $if;
	/* perform a periodic reset? */
	if(!isset($_POST['pppoe_preset'])) {
		setup_pppoe_reset_file($if, false);		
		return;
	}
	if (!is_array($config['cron']['item'])) 
		$config['cron']['item'] = array(); 
	$itemhash = getMPDCRONSettings();
	$item = $itemhash['ITEM'];
	if (empty($item)) 
		$item = array();
	if (isset($_POST['pppoe_pr_type']) && $_POST['pppoe_pr_type'] == "custom") {
		$wancfg['pppoe']['pppoe-reset-type'] = "custom";
		$pconfig['pppoe_pr_custom'] = true;
		$item['minute'] = $_POST['pppoe_resetminute'];
		$item['hour'] = $_POST['pppoe_resethour'];
		if (isset($_POST['pppoe_resetdate']) && $_POST['pppoe_resetdate'] <> "" && strlen($_POST['pppoe_resetdate']) == 10) {
			$date = explode("/", $_POST['pppoe_resetdate']);
			$item['mday'] = $date[1];
			$item['month'] = $date[0];
		} else {
			$item['mday'] = "*";
			$item['month'] = "*";
		}
		$item['wday'] = "*";
		$item['who'] = "root";
		$item['command'] = CRON_PPPOE_CMD_FILE;
	} else if (isset($_POST['pppoe_pr_type']) && $_POST['pppoe_pr_type'] = "preset") {
		$wancfg['pppoe']['pppoe-reset-type'] = "preset";
		$pconfig['pppoe_pr_preset'] = true;
		switch ($_POST['pppoe_pr_preset_val']) {
			case "monthly":
				$item['minute'] = "0";
				$item['hour'] = "0";
				$item['mday'] = "1";
				$item['month'] = "*";
				$item['wday'] = "*";
				$item['who'] = "root";
				$item['command'] = CRON_PPPOE_CMD_FILE;
				break;
	        	case "weekly":
				$item['minute'] = "0";
				$item['hour'] = "0";
				$item['mday'] = "*";
				$item['month'] = "*";
				$item['wday'] = "0";
				$item['who'] = "root";
				$item['command'] = CRON_PPPOE_CMD_FILE;
				break;
			case "daily":
				$item['minute'] = "0";
				$item['hour'] = "0";
				$item['mday'] = "*";
				$item['month'] = "*";
				$item['wday'] = "*";
				$item['who'] = "root";
				$item['command'] = CRON_PPPOE_CMD_FILE;
				break;
			case "hourly":
				$item['minute'] = "0";
				$item['hour'] = "*";
				$item['mday'] = "*";
				$item['month'] = "*";
				$item['wday'] = "*";
				$item['who'] = "root";
				$item['command'] = CRON_PPPOE_CMD_FILE;
				break;
		} // end switch
	} // end if
	if (isset($itemhash['ID'])) 
		$config['cron']['item'][$itemhash['ID']] = $item;
	else 
		$config['cron']['item'][] = $item;
	/* finally install the pppoerestart file */
	if (isset($_POST['pppoe_preset'])) {
		setup_pppoe_reset_file($if, true);
		$wancfg['pppoe_reset'] = true;
		$wancfg['pppoe_preset'] = true;
		sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP");
	} else {
		unset($wancfg['pppoe_reset']);
		unset($wancfg['pppoe_preset']);		
		setup_pppoe_reset_file($if, false);	
	}
}

function handle_wireless_post() {
	global $_POST, $config, $g, $wancfg, $if;
	if (!is_array($wancfg['wireless']))
		$wancfg['wireless'] = array();
	$wancfg['wireless']['standard'] = $_POST['standard'];
	$wancfg['wireless']['mode'] = $_POST['mode'];
	$wancfg['wireless']['protmode'] = $_POST['protmode'];
	$wancfg['wireless']['ssid'] = $_POST['ssid'];
	$wancfg['wireless']['channel'] = $_POST['channel'];
	$wancfg['wireless']['authmode'] = $_POST['authmode'];
	$wancfg['wireless']['txpower'] = $_POST['txpower'];
	$wancfg['wireless']['distance'] = $_POST['distance'];
	if (!is_array($wancfg['wireless']['wpa']))
		$wancfg['wireless']['wpa'] = array();
	$wancfg['wireless']['wpa']['macaddr_acl'] = $_POST['macaddr_acl'];
	$wancfg['wireless']['wpa']['auth_algs'] = $_POST['auth_algs'];
	$wancfg['wireless']['wpa']['wpa_mode'] = $_POST['wpa_mode'];
	$wancfg['wireless']['wpa']['wpa_key_mgmt'] = $_POST['wpa_key_mgmt'];
	$wancfg['wireless']['wpa']['wpa_pairwise'] = $_POST['wpa_pairwise'];
	$wancfg['wireless']['wpa']['wpa_group_rekey'] = $_POST['wpa_group_rekey'];
	$wancfg['wireless']['wpa']['wpa_gmk_rekey'] = $_POST['wpa_gmk_rekey'];
	$wancfg['wireless']['wpa']['passphrase'] = $_POST['passphrase'];
	$wancfg['wireless']['wpa']['ext_wpa_sw'] = $_POST['ext_wpa_sw'];
	if ($_POST['hidessid_enable'] == "yes")
		$wancfg['wireless']['hidessid']['enable'] = true;
	else if (isset($wancfg['wireless']['hidessid']['enable']))
		unset($wancfg['wireless']['hidessid']['enable']);
	if ($_POST['mac_acl_enable'] == "yes")
		$wancfg['wireless']['wpa']['mac_acl_enable'] = true;
	else if (isset($wancfg['wireless']['wpa']['mac_acl_enable']))
		unset($wancfg['wireless']['wpa']['mac_acl_enable']);
	if ($_POST['ieee8021x'] == "yes")
		$wancfg['wireless']['wpa']['ieee8021x']['enable'] = true;
	else if (isset($wancfg['wireless']['wpa']['ieee8021x']['enable']))
		unset($wancfg['wireless']['wpa']['ieee8021x']['enable']);
	if ($_POST['wpa_strict_rekey'] == "yes")
		$wancfg['wireless']['wpa']['wpa_strict_rekey'] = true;
	else if (isset($wancfg['wireless']['wpa']['wpa_strict_rekey']))
		unset($wancfg['wireless']['wpa']['wpa_strict_rekey']);
	if ($_POST['debug_mode'] == "yes")
		$wancfg['wireless']['wpa']['debug_mode'] = true;
	else if (isset($wancfg['wireless']['wpa']['debug_mode']))
		sunset($wancfg['wireless']['wpa']['debug_mode']);
	if ($_POST['wpa_enable'] == "yes")
		$wancfg['wireless']['wpa']['enable'] = $_POST['wpa_enable'] = true;
	else if (isset($wancfg['wireless']['wpa']['enable']))
		unset($wancfg['wireless']['wpa']['enable']);
	if ($_POST['wep_enable'] == "yes") {
		if (!is_array($wancfg['wireless']['wep']))
			$wancfg['wireless']['wep'] = array();
		$wancfg['wireless']['wep']['enable'] = $_POST['wep_enable'] = true;
	} else if (isset($wancfg['wireless']['wep']))
		unset($wancfg['wireless']['wep']);
	if ($_POST['wme_enable'] == "yes") {
		if (!is_array($wancfg['wireless']['wme']))
			$wancfg['wireless']['wme'] = array();
		$wancfg['wireless']['wme']['enable'] = $_POST['wme_enable'] = true;
	} else if (isset($wancfg['wireless']['wme']['enable']))
		unset($wancfg['wireless']['wme']['enable']);
	if ($_POST['pureg_enable'] == "yes") {
		if (!is_array($wancfg['wireless']['pureg']))
			$wancfg['wireless']['pureg'] = array();
		$wancfg['wireless']['pureg']['enable'] = $_POST['pureg_enable'] = true;
	} else if (isset($wancfg['wireless']['pureg']['enable']))
		unset($wancfg['wireless']['pureg']['enable']);
	if ($_POST['apbridge_enable'] == "yes") {
		if (!is_array($wancfg['wireless']['apbridge']))
			$wancfg['wireless']['apbridge'] = array();
		$wancfg['wireless']['apbridge']['enable'] = $_POST['apbridge_enable'] = true;
	} else if (isset($wancfg['wireless']['apbridge']['enable']))
		unset($wancfg['wireless']['apbridge']['enable']);
	if ($_POST['standard'] == "11a Turbo") {
		if (!is_array($wancfg['wireless']['turbo']))
			$wancfg['wireless']['turbo'] = array();
		$wancfg['wireless']['turbo']['enable'] = true;
	} else if (isset($wancfg['wireless']['turbo']['enable']))
		unset($wancfg['wireless']['turbo']['enable']);
	$wancfg['wireless']['wep']['key'] = array();
	for ($i = 1; $i <= 4; $i++) {
		if ($_POST['key' . $i]) {
			$newkey = array();
			$newkey['value'] = $_POST['key' . $i];
			if ($_POST['txkey'] == $i)
				$newkey['txkey'] = true;
			$wancfg['wireless']['wep']['key'][] = $newkey;
		}
	}
}

$pgtitle = array("网络设置", $pconfig['descr']);
$pgmenu = array('network', "/interfaces.php?if=$if");
$closehead = false;
include("head.inc");
$types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" => "PPPoE", "pptp" => "PPTP" /* , "carpdev-dhcp" => "CarpDev"*/); 

?>

<script type="text/javascript" src="/javascript/numericupdown/js/numericupdown.js"></script>
<link href="/javascript/numericupdown/css/numericupdown.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/javascript/datepicker/js/datepicker.js"></script>
<link href="/javascript/datepicker/css/datepicker.css" rel="stylesheet" type="text/css"/>

<script type="text/javascript">
	function updateType(t){
		switch(t) {
	<?php
		/* OK, so this is sick using php to generate javascript, but it needed to be done */
		foreach ($types as $key => $val) {
			echo "case \"{$key}\": {\n";
			$t = $types;
			foreach ($t as $k => $v) {
				if ($k != $key) {
					echo "$('{$k}').hide();\n";
				}
			}
			echo "}\n";
		}
	?>
		}
		$(t).show();
	}

	function show_allcfg(obj) {
		if (obj.checked)
			$('allcfg').show();
		else
			$('allcfg').hide();
	}
	
	function show_periodic_reset(obj) {
		if (obj.checked)
			$('presetwrap').show();
		else
			$('presetwrap').hide();
	}

	function show_mon_config() {
		document.getElementById("showmonbox").innerHTML='';
		aodiv = document.getElementById('showmon');
		aodiv.style.display = "block";
	}

	function openwindow(url) {
		var oWin = window.open(url,"pfSensePop","width=620,height=400,top=150,left=150");
		if (oWin==null || typeof(oWin)=="undefined") 
			return false;
		else 
			return true;
	}
</script>
</head>
	<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
	<?php include("fbegin.inc"); ?>
	<div class="soft_cont_right_table">
	<form action="interfaces.php" method="post" name="iform" id="iform">
		<?php if ($input_errors) print_input_errors($input_errors); ?>
		<?php if (file_exists($d_landirty_path)): ?><p>
		<?php print_info_box_np(gettext("{$wancfg['descr']}配置已更改。<p>请应用更改使其生效。<p>"));?><br />
		<?php endif; ?>
		<?php if ($savemsg) print_info_box($savemsg); ?>
		<table width="100%" border="0" cellpadding="6" cellspacing="0">
		<tr>
			<td colspan="2" valign="top" class="listtopic">一般设置</td>
		</tr>
		<?php if ($if != "wan" && $if != "lan"): ?>
		<tr>
			<td width="22%" valign="top" class="vncell">启用</td>
			<td width="78%" class="vtable">
				<input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable'] == true) echo "checked"; ?> onClick="show_allcfg(this);">
			<strong>启用该接口。</strong>
			</td>
		</tr>
		<?php endif; ?>
		</table>
		<div style="display:none;" name="allcfg" id="allcfg">
		<table width="100%" border="0" cellpadding="6" cellspacing="0">
			<tr>
				<td width="22%" valign="top" class="vncell">名称</td>
				<td width="78%" class="vtable">
					<input name="descr" type="text" class="formfld unknown" id="descr" size="30" value="<?=htmlspecialchars($pconfig['descr']);?>">
					<br><span class="vexpl">在这里输入接口的名称。</span>
				</td>
			</tr>
			<tr>
				<td valign="middle" class="vncell"><strong>类型</strong></td>
				<td class="vtable"> 
					<select name="type" onChange="updateType(this.value);" class="formselect" id="type">
					<?php 
						foreach ($types as $key => $opt) { 
							echo "<option onClick=\"updateType('{$key}');\"";
							if ($key == $pconfig['type']) 
								echo " selected";
							echo " value=\"{$key}\" >" . htmlspecialchars($opt);
							echo "</option>";
					    } 
					?>
					</select>
				</td>
			</tr>
			<tr>
				<td valign="top" class="vncell">MAC地址</td>
				<td class="vtable">
					<input name="spoofmac" type="text" class="formfld unknown" id="spoofmac" size="30" value="<?=htmlspecialchars($pconfig['spoofmac']);?>">
				    <?php
						$ip = getenv('REMOTE_ADDR');
						$mac = `/usr/sbin/arp -an | grep {$ip} | cut -d" " -f4`;
						$mac = str_replace("\n","",$mac);
						if($mac):
					?>
						<a OnClick="document.forms[0].spoofmac.value='<?=$mac?>';" href="#">使用我的MAC地址</a>
					<?php endif; ?>
					<br>
					这个字段可以用来修改接口的MAC地址。请按下面的格式输入MAC地址或者留空。xx:xx:xx:xx:xx:xx
				</td>
			</tr>
			<tr>
				<td valign="top" class="vncell">MTU</td>
				<td class="vtable"> 
					<input name="mtu" type="text" class="formfld unknown" id="mtu" size="8" value="<?=htmlspecialchars($pconfig['mtu']);?>">
					<br>
					默认值为1500。
				</td>
			</tr>
			<tr>
				<td colspan="2" valign="top" height="16"></td>
			</tr>			
			<tr style="display:none;" name="none" id="none">
			</tr>
			<tr style="display:none;" name="static" id="static">
				<td colspan="2" style="padding:0px;">
					<table width="100%" border="0" cellpadding="6" cellspacing="0">
						<tr>
							<td colspan="2" valign="top" class="listtopic">静态IP配置</td>
						</tr>
						<tr>
							<td width="22%" valign="top" class="vncellreq">IP地址</td>
							<td width="78%" class="vtable"> 
								<input name="ipaddr" type="text" class="formfld unknown" id="ipaddr" size="20" value="<?=htmlspecialchars($pconfig['ipaddr']);?>">
								/
								<select name="subnet" class="formselect" id="subnet">
									<?php
									for ($i = 32; $i > 0; $i--) {
										if($i <> 31) {
											echo "<option value=\"{$i}\" ";
											if ($i == $pconfig['subnet']) echo "selected";
											echo ">" . $i . "</option>";
										}
									}
									?>
								</select>
							</td>
						</tr>
						<?php if (isset($wancfg['ispointtopoint'])): ?>
							<tr>
								<td width="22%" valign="top" class="vncellreq">点对点IP地址</td>
								<td width"78%" class="vtable">
									<input name="pointtopoint" type="text" class="formfld unknown" id="pointtopoint" size="20" value="<?=htmlspecialchars($pconfig['pointtopoint']);?>">
								</td>
							</tr>
						<?php endif; ?>
						<?php if ($if != 'lan'): ?>
						<tr>
							<td width="22%" valign="top" class="vncellreq">网关</td>
							<td width="78%" class="vtable">
								<input name="gateway" type="text" class="formfld unknown" id="gateway" size="20" value="<?=htmlspecialchars($pconfig['gateway']);?>">
							</td>
						</tr>
						<?php endif; ?>
					</table>
				</td>
				</tr>
				<tr style="display:none;" name="dhcp" id="dhcp">
					<td colspan="2" style="padding: 0px;">
						<table width="100%" border="0" cellpadding="6" cellspacing="0">
							<tr>
								<td colspan="2" valign="top" class="listtopic">DHCP客户配置</td>
							</tr>
							<tr>
								<td width="22%" valign="top" class="vncell">主机名</td>
								<td width="78%" class="vtable">
									<input name="dhcphostname" type="text" class="formfld unknown" id="dhcphostname" size="40" value="<?=htmlspecialchars($pconfig['dhcphostname']);?>">
									<br>
									这个字段在请求DHCP租约的时候会作为DHCP客户端的标识被发送，一些服务商可能需要这个设置。
								</td>
							</tr>
							<tr>
								<td width="22%" valign="top" class="vncellreq">Alias IP地址</td>
								<td width="78%" class="vtable"> 
									<input name="alias-address" type="text" class="formfld unknown" id="alias-address" size="20" value="<?=htmlspecialchars($pconfig['alias-address']);?>">
									<select name="alias-subnet" class="formselect" id="alias-subnet">
										<?php
										for ($i = 32; $i > 0; $i--) {
											if($i <> 31) {
												echo "<option value=\"{$i}\" ";
												if ($i == $pconfig['alias-subnet']) echo "selected";
												echo ">" . $i . "</option>";
											}
										}
										?>
									</select>
									这个地址作为一个DHCP接口的一个固定IP地址。
								</td>
							</tr>
						</table>
					</td>
				</tr>
				<tr style="display:none;" name="pppoe" id="pppoe">
					<td colspan="2" style="padding:0px;">
						<table width="100%" border="0" cellpadding="6" cellspacing="0">
							<tr>
								<td colspan="2" valign="top" class="listtopic">PPPoE设置</td>
							</tr>
							<tr>
								<td width="22%" valign="top" class="vncellreq">用户名</td>
								<td width="78%" class="vtable">
										<input name="pppoe_username" type="text" class="formfld user" id="pppoe_username" size="20" value="<?=htmlspecialchars($pconfig['pppoe_username']);?>">
								</td>
							</tr>
							<tr>
								<td width="22%" valign="top" class="vncellreq">密码</td>
								<td width="78%" class="vtable">
									<input name="pppoe_password" type="password" class="formfld pwd" id="pppoe_password" size="20" value="<?=htmlspecialchars($pconfig['pppoe_password']);?>">
								</td>
							</tr>
							<tr>
								<td width="22%" valign="top" class="vncell">连接名称</td>
								<td width="78%" class="vtable"><input name="provider" type="text" class="formfld unknown" id="provider" size="20" value="<?=htmlspecialchars($pconfig['provider']);?>">
									<br> <span class="vexpl">提示：您可以不用填写本子段。</span>
								</td>
							</tr><!--
                            <tr>
                                <td width="22%" valign="top" class="vncell">IP地址</td>
                                <td width="78%" class="vtable">
                                <input type="radio" name="pppoe_iptype" <?php if($pconfig['pppoe_iptype'] != "manual") echo "checked";?>>自动获取<br>
                                <input type="radio" name="pppoe_iptype" <?php if($pconfig['pppoe_iptype'] == "manual") echo "checked";?>>手动指定<br>
                                </td>
                            </tr>-->							
                            <tr>
                                <td width="22%" valign="top" class="vncell">拨号方式</td>
                                <td width="78%" class="vtable">
                                <input type="radio" name="pppoe_dialmethod" value="autoredial" <?php if($pconfig['pppoe_dialmethod'] != "ondemand" || $pconfig['pppoe_dialmethod'] != "manual") echo "checked";?>>自动连接<br>
                                <input type="radio" name="pppoe_dialmethod" value="ondemand" <?php if($pconfig['pppoe_dialmethod'] == "ondemand") echo "checked";?>>按需连接<br>
                                <input type="radio" name="pppoe_dialmethod" value="manual" <?php if($pconfig['pppoe_dialmethod'] == "manual") echo "checked";?>>手动连接<br>
                                </td>					
                            </tr>
							<tr>
								<td width="22%" valign="top" class="vncell">空闲断线</td>
								<td width="78%" class="vtable">
									<input name="pppoe_idletimeout" type="text" class="formfld unknown" id="pppoe_idletimeout" size="8" value="<?=htmlspecialchars($pconfig['pppoe_idletimeout']);?>"> 秒<br>指定时间内没有流量自动断开连接。填写0禁用该功能。仅对按需连接和手动连接有效。
								</td>
							</tr>
							<tr>
								<td width="22%" valign="top" class="vncell"><?=gettext("定期重连");?></td>
								<td width="78%" class="vtable">
									<input name="pppoe_preset" type="checkbox" id="pppoe_preset" value="yes" <?php if ($pconfig['pppoe_preset']) echo "checked=\"checked\""; ?> onclick="show_periodic_reset(this);" />
										<?= gettext("启用PPPoE定期重连。"); ?>
										<br />
										<?php if ($pconfig['pppoe_preset']): ?>
											<table id="presetwrap" cellspacing="0" cellpadding="0" width="100%">
											<?php else: ?>
												<table id="presetwrap" cellspacing="0" cellpadding="0" width="100%" style="display: none;">
												<?php endif; ?>
												<tr>
													<td align="left" valign="top">
														<p style="margin: 4px; padding: 4px 0 4px 0; width: 94%;">
															<input name="pppoe_pr_type" type="radio" id="pppoe_pr_custom" value="custom" <?php if ($pconfig['pppoe_pr_custom']) echo "checked=\"checked\""; ?> onclick="if (this.checked) { Effect.Appear('pppoecustomwrap', { duration: 0.0 }); Effect.Fade('pppoepresetwrap', { duration: 0.0 }); }" /> 
																<?= gettext("自定义重连时间。"); ?>
																<br />
																<input name="pppoe_pr_type" type="radio" id="pppoe_pr_preset" value="preset" <?php if ($pconfig['pppoe_pr_preset']) echo "checked=\"checked\""; ?> onclick="if (this.checked) { Effect.Appear('pppoepresetwrap', { duration: 0.0 }); Effect.Fade('pppoecustomwrap', { duration: 0.0 }); }" /> 
																	<?= gettext("使用预设的重连时间。"); ?>
																</p>
																<?php if ($pconfig['pppoe_pr_custom']): ?>
																	<p style="margin: 2px; padding: 4px; width: 94%;" id="pppoecustomwrap">
																	<?php else: ?>
																		<p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoecustomwrap">
																		<?php endif; ?>
																		<input type="text" name="pppoe_resethour" class="fd_incremental_inp_range_0_23 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resethour" value="<?= $pconfig['pppoe_resethour']; ?>" size="3" /> 
																		<?= gettext("时 (0-23)"); ?><br />
																		<input type="text" name="pppoe_resetminute" class="fd_incremental_inp_range_0_59 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resetminute" value="<?= $pconfig['pppoe_resetminute']; ?>" size="3" /> 
																		<?= gettext("分 (0-59)"); ?><br />
																		<input name="pppoe_resetdate" type="text" class="w8em format-m-d-y highlight-days-67" id="pppoe_resetdate" maxlength="10" size="10" value="<?=htmlspecialchars($pconfig['pppoe_resetdate']);?>" /> 
																		<?= gettext("日期 (mm/dd/yyyy)"); ?>
																		<br />&nbsp;<br />
																		<span class="red"><strong>注意：</strong></span>
																		如果日期字段留空，每天都会在设定的时间点重连。
																	</p>
																	<?php if ($pconfig['pppoe_pr_preset']): ?>
																		<p style="margin: 2px; padding: 4px; width: 94%;" id="pppoepresetwrap">
																		<?php else: ?>
																			<p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoepresetwrap">
																			<?php endif; ?>
																			<input name="pppoe_pr_preset_val" type="radio" id="pppoe_monthly" value="monthly" <?php if ($pconfig['pppoe_monthly']) echo "checked=\"checked\""; ?> /> 
																			<?= gettext("每月 ('0 0 1 * *')"); ?>
																			<br />
																			<input name="pppoe_pr_preset_val" type="radio" id="pppoe_weekly" value="weekly" <?php if ($pconfig['pppoe_weekly']) echo "checked=\"checked\""; ?> /> 
																			<?= gettext("每周 ('0 0 * * 0')"); ?>
																			<br />
																			<input name="pppoe_pr_preset_val" type="radio" id="pppoe_daily" value="daily" <?php if ($pconfig['pppoe_daily']) echo "checked=\"checked\""; ?> /> 
																			<?= gettext("每天 ('0 0 * * *')"); ?>
																			<br />
																			<input name="pppoe_pr_preset_val" type="radio" id="pppoe_hourly" value="hourly" <?php if ($pconfig['pppoe_hourly']) echo "checked=\"checked\""; ?> /> 
																			<?= gettext("每小时 ('0 * * * *')"); ?>
																		</p>
																	</td>
																</tr>
															</table>
														</td>
													</tr>
												</table>
											</td>
										</tr>
										<tr style="display:none;" name="pptp" id="pptp">
											<td colspan="2" style="padding:0px;">
												<table width="100%" border="0" cellpadding="6" cellspacing="0">
													<tr>
														<td colspan="2" valign="top" class="listtopic">PPTP设置</td>
													</tr>
													<tr>
														<td width="22%" valign="top" class="vncellreq">用户名</td>
														<td width="78%" class="vtable">
															<input name="pptp_username" type="text" class="formfld user" id="pptp_username" size="20" value="<?=htmlspecialchars($pconfig['pptp_username']);?>">
														</td>
													</tr>
													<tr>
														<td width="22%" valign="top" class="vncellreq">密码</td>
														<td width="78%" class="vtable">
															<input name="pptp_password" type="text" class="formfld pwd" id="pptp_password" size="20" value="<?=htmlspecialchars($pconfig['pptp_password']);?>">
														</td>
													</tr>
													<tr>
														<td width="22%" width="100" valign="top" class="vncellreq">本地IP地址</td>
														<td width="78%" class="vtable"> 
															<input name="pptp_local" type="text" class="formfld unknown" id="pptp_local" size="20"  value="<?=htmlspecialchars($pconfig['pptp_local']);?>">
															/
															<select name="pptp_subnet" class="formselect" id="pptp_subnet">
																<?php for ($i = 31; $i > 0; $i--): ?>
																	<option value="<?=$i;?>" <?php if ($i == $pconfig['pptp_subnet']) echo "selected"; ?>>
																		<?=$i;?>
																	</option>
																<?php endfor; ?>
															</select>
														</td>
													</tr>
													<tr>
														<td width="22%" width="100" valign="top" class="vncellreq">远程IP地址</td>
														<td width="78%" class="vtable">
															<input name="pptp_remote" type="text" class="formfld unknown" id="pptp_remote" size="20" value="<?=htmlspecialchars($pconfig['pptp_remote']);?>">
														</td>
													</tr>
													<tr>
														<td width="22%" valign="top" class="vncell">按需拨号</td>
														<td width="78%" class="vtable">
															<input name="pptp_dialondemand" type="checkbox" id="pptp_dialondemand" value="enable" <?php if ($pconfig['pptp_dialondemand']) echo "checked"; ?>>
															<strong>启用按需拨号。</strong><br>
				                                        </td>
													</tr>
													<tr>
														<td width="22%" valign="top" class="vncell">空闲断线</td>
														<td width="78%" class="vtable">
															<input name="pptp_idletimeout" type="text" class="formfld unknown" id="pptp_idletimeout" size="8" value="<?=htmlspecialchars($pconfig['pptp_idletimeout']);?>"> seconds<br>If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature.
														</td>
													</tr>
												</table>
											</td>
										</tr>
										<?php
											/* Wireless interface? */
											if (isset($wancfg['wireless'])):
										?>
										<tr>
											<td colspan="2" valign="top" height="16"></td>
										</tr>										
										<tr>
											<td colspan="2" valign="top" class="listtopic">无线设置</td>
										</tr>
										<tr>
											<td valign="top" class="vncellreq">无线模式</td>
											<td class="vtable">
											<select name="standard" class="formselect" id="standard">
												<?php
												foreach($wl_modes as $wl_standard => $wl_channels) {
													echo "<option ";
													if ($pconfig['standard'] == "$wl_standard")
														echo "selected ";
													echo "value=\"$wl_standard\">802.$wl_standard</option>\n";
												}
												?>
											</select>
										</td>
									</tr>
									<tr>
										<td valign="top" class="vncellreq">网络类型</td>
										<td class="vtable">
											<select name="mode" class="formselect" id="mode">
												<option <? if ($pconfig['mode'] == 'bss') echo "selected";?> value="bss">基本结构</option>
												<option <? if ($pconfig['mode'] == 'adhoc') echo "selected";?> value="adhoc">点对点(Ad-hoc)</option>
												<option <? if ($pconfig['mode'] == 'hostap') echo "selected";?> value="hostap">访问接入点(Access Point)</option>
											</select>
										</td>
									</tr>
									<tr>
										<td valign="top" class="vncellreq">802.11g OFDM 保护模式</td>
										<td class="vtable">
											<select name="protmode" class="formselect" id="protmode">
												<option <? if ($pconfig['protmode'] == 'off') echo "selected";?> value="off">关闭</option>
												<option <? if ($pconfig['protmode'] == 'cts') echo "selected";?> value="cts">CTS</option>
												<option <? if ($pconfig['protmode'] == 'rtscts') echo "selected";?> value="rtscts">RTS/CTS</option>
											</select>
											<!--<br/>
											For IEEE 802.11g, use the specified technique for protecting OFDM frames in a mixed 11b/11g network.
											<br/>-->
										</td>
									</tr>
									<tr>
										<td valign="top" class="vncellreq">网络名称(SSID)</td>
										<td class="vtable">
											<input name="ssid" type="text" class="formfld unknown" id="ssid" size="20" value="<?=htmlspecialchars($pconfig['ssid']); ?>">
											<br>区分大小写
										</td>
                					</tr>
									<tr>
										<td valign="top" class="vncell">仅802.11g</td>
										<td class="vtable">
											<input name="pureg_enable" type="checkbox" value="yes"  class="formfld" id="pureg_enable" <? if ($pconfig['pureg_enable']) echo "checked";?>>
											<br/>当使用802.11g模式作为访问接入点时，只允许802.11g能力的接入。
										</td>
									</tr>
									<tr>
										<td valign="top" class="vncell">允许内部通信</td>
										<td class="vtable">
											<input name="apbridge_enable" type="checkbox" value="yes"  class="formfld" id="apbridge_enable" <? if ($pconfig['apbridge_enable']) echo "checked";?>>
											<br/>
											当作为访问接入点时允许客户端之间直接通信。
											<br/>	
										</td>
									</tr>
									<tr>
										<td valign="top" class="vncell">启用WME</td>
										<td class="vtable">
											<input name="wme_enable" type="checkbox" class="formfld" id="wme_enable" value="yes" <? if ($pconfig['wme_enable']) echo "checked";?>>
											<br/>选中该选项强制无效网卡使用WME (无线QoS).
										</td>
									</tr>
									<tr>
										<td valign="top" class="vncell">启用SSID隐藏</td>
										<td class="vtable">
											<input name="hidessid_enable" type="checkbox" class="formfld" id="hidessid_enable" value="yes" <? if ($pconfig['hidessid_enable']) echo "checked";?>>
											<!--<br/>
											Setting this option will force the card to NOT broadcast its SSID
											<br/>
											(this might create problems for some clients). --></td>
										</tr>
										<tr>
											<td valign="top" class="vncellreq">传输功率</td>
											<td class="vtable">
												<select name="txpower" class="formselect" id="txpower">
													<?
													for($x = 99; $x > 0; $x--) {
														if($pconfig["txpower"] == $x)
															$SELECTED = " SELECTED";
														else
															$SELECTED = "";
														echo "<option {$SELECTED}>{$x}</option>\n";
													}
													?>
												</select><br/>
												<!--Note: Typically only a few discreet power settings are available and the driver will use the setting closest to the specified value.  Not all adaptors support changing the transmit power setting.-->
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncellreq">频道</td>
											<td class="vtable">
												<select name="channel" class="formselect" id="channel">
													<option <? if ($pconfig['channel'] == 0) echo "selected"; ?> value="0">自动</option>
													<?php
													foreach($wl_modes as $wl_standard => $wl_channels) {
														if($wl_standard == "11g") { $wl_standard = "11b/g"; }
														foreach($wl_channels as $wl_channel) {
															echo "<option ";
															if ($pconfig['channel'] == "$wl_channel") {
																echo "selected ";
															}
															echo "value=\"$wl_channel\">$wl_standard - $wl_channel</option>\n";
														}
													}
													?>
												</select>
												<br/>
												<!--Note: Not all channels may be supported by your card-->
											</td>
										</tr>
										<tr style="display:none">
											<td valign="top" class="vncell">Distance setting</td>
											<td class="vtable">
												<input name="distance" type="text" class="formfld unknown" id="distance" size="5" value="<?=htmlspecialchars($pconfig['distance']);?>">
												<br/>
												Note: This field can be used to tune ACK/CTS timers to fit the distance between AP and Client<br/>
												(measured in Meters and works only for Atheros based cards !)
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">WEP</td>
											<td class="vtable"> 
												<input name="wep_enable" type="checkbox" id="wep_enable" value="yes" <? if ($pconfig['wep_enable']) echo "checked"; ?>>
												<strong>启用WEP</strong>
												<table border="0" cellspacing="0" cellpadding="0">
													<tr>
														<td>&nbsp;</td>
														<td>&nbsp;</td>
														<td>&nbsp;TX密钥&nbsp;</td>
													</tr>
													<tr>
														<td>密钥1:&nbsp;&nbsp;</td>
														<td>
															<input name="key1" type="text" class="formfld unknown" id="key1" size="30" value="<?=htmlspecialchars($pconfig['key1']);?>">
														</td>
														<td align="center">
															<input name="txkey" type="radio" value="1" <? if ($pconfig['txkey'] == 1) echo "checked";?>>
														</td>
													</tr>
													<tr>
														<td>密钥2:&nbsp;&nbsp;</td>
														<td>
															<input name="key2" type="text" class="formfld unknown" id="key2" size="30" value="<?=htmlspecialchars($pconfig['key2']);?>">
														</td>
														<td align="center">
															<input name="txkey" type="radio" value="2" <? if ($pconfig['txkey'] == 2) echo "checked";?>>
														</td>
													</tr>
													<tr>
														<td>密钥3:&nbsp;&nbsp;</td>
														<td>
															<input name="key3" type="text" class="formfld unknown" id="key3" size="30" value="<?=htmlspecialchars($pconfig['key3']);?>">
														</td>
														<td align="center">
															<input name="txkey" type="radio" value="3" <? if ($pconfig['txkey'] == 3) echo "checked";?>>
														</td>
													</tr>
													<tr>
														<td>密钥4:&nbsp;&nbsp;</td>
														<td>
															<input name="key4" type="text" class="formfld unknown" id="key4" size="30" value="<?=htmlspecialchars($pconfig['key4']);?>">
														</td>
														<td align="center">
															<input name="txkey" type="radio" value="4" <? if ($pconfig['txkey'] == 4) echo "checked";?>>
														</td>
													</tr>
												</table>
												<br/>
												40 (64) 位密钥输入5个ASCII字符或者0x开头输入10个16进制数。<br/>
												104 (128) 位密钥输入13个ASCII字符或者0x开头输入26个16进制数。
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">WPA</td>
											<td class="vtable">
												<input name="wpa_enable" type="checkbox" class="formfld" id="wpa_enable" value="yes" <? if ($pconfig['wpa_enable']) echo "checked"; ?>>
												<strong>启用WPA</strong>
												<br/><br/>
												<table border="0" cellspacing="0" cellpadding="0">
													<tr>
														<td>&nbsp;</td>
														<td>&nbsp;WPA PSK&nbsp;</td>
													</tr>
													<tr>
														<td>PSK:&nbsp;&nbsp;</td>
														<td>
															<input name="passphrase" type="text" class="formfld unknown" id="passphrase" size="66" value="<?=htmlspecialchars($pconfig['passphrase']);?>">
														</td>
													</tr>
												</table>
												<br/>8-63个字符。
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">WPA加密方式</td>
											<td class="vtable">
												<select name="wpa_mode" class="formselect" id="wpa_mode">
													<option <? if ($pconfig['wpa_mode'] == '1') echo "selected";?> value="1">WPA</option>
													<option <? if ($pconfig['wpa_mode'] == '2') echo "selected";?> value="2">WPA2</option>
													<option <? if ($pconfig['wpa_mode'] == '3') echo "selected";?> value="3">同时</option>
												</select>
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">WPA密钥管理方式</td>
											<td class="vtable"> 
												<select name="wpa_key_mgmt" class="formselect" id="wpa_key_mgmt">
													<option <? if ($pconfig['wpa_key_mgmt'] == 'WPA-PSK') echo "selected";?> value="WPA-PSK">PSK</option>
													<option <? if ($pconfig['wpa_key_mgmt'] == 'WPA-EAP') echo "selected";?> value="WPA-EAP">EAP</option>
													<option <? if ($pconfig['wpa_key_mgmt'] == 'WPA-PSK WPA-EAP') echo "selected";?> value="WPA-PSK WPA-EAP">同时</option>
 												</select>
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">验证方式</td>
											<td class="vtable">
												<select name="auth_algs" class="formselect" id="auth_algs">
													<option <? if ($pconfig['auth_algs'] == '1') echo "selected";?> value="1">开放系统验证</option>
													<option <? if ($pconfig['auth_algs'] == '2') echo "selected";?> value="2">共享密钥验证</option>
													<option <? if ($pconfig['auth_algs'] == '3') echo "selected";?> value="3">同时</option>
												</select>
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">WPA Pairwise</td>
											<td class="vtable">
												<select name="wpa_pairwise" class="formselect" id="wpa_pairwise">
													<option <? if ($pconfig['wpa_pairwise'] == 'CCMP TKIP') echo "selected";?> value="CCMP TKIP">同时</option>
													<option <? if ($pconfig['wpa_pairwise'] == 'CCMP') echo "selected";?> value="CCMP">AES</option>
													<option <? if ($pconfig['wpa_pairwise'] == 'TKIP') echo "selected";?> value="TKIP">TKIP</option>
												</select>
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">密钥轮换</td>
											<td class="vtable">
												<input name="wpa_group_rekey" type="text" class="formfld unknown" id="wpa_group_rekey" size="30" value="<? echo $pconfig['wpa_group_rekey'] ? $pconfig['wpa_group_rekey'] : "60";?>">
												<!--<br/>Allowed values are 1-9999 but should not be longer than Master Key Regeneration time.-->
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">主密钥重置</td>
											<td class="vtable">
												<input name="wpa_gmk_rekey" type="text" class="formfld" id="wpa_gmk_rekey" size="30" value="<? echo $pconfig['wpa_gmk_rekey'] ? $pconfig['wpa_gmk_rekey'] : "3600";?>">
												<!--<br/>Allowed values are 1-9999 but should not be shorter than Key Rotation time.-->
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">严格密钥重置</td>
											<td class="vtable">
												<input name="wpa_strict_rekey" type="checkbox" value="yes"  class="formfld" id="wpa_strict_rekey" <? if ($pconfig['wpa_strict_rekey']) echo "checked"; ?>>
												<!--<br/>Setting this option will force the AP to rekey whenever a client disassociates.-->
											</td>
										</tr>
										<tr>
											<td valign="top" class="vncell">启用IEEE802.1X</td>
											<td class="vtable">
												<input name="ieee8021x" type="checkbox" value="yes"  class="formfld" id="ieee8021x" <? if ($pconfig['ieee8021x']) echo "checked";?>>
												<!--<br/>Setting this option will enable 802.1x authentication.-->
											</td>
										</tr>
									<? endif; ?>
									<tr>
										<td colspan="2" valign="top" height="16"></td>
									</tr>
									<?php if($if != "lan"): ?>
									<tr>
										<td colspan="2" valign="top" class="listtopic">安全设置</td>
									</tr>
									<tr>
										<td valign="middle" class="vncell">&nbsp;</td>
										<td class="vtable">
											<a name="rfc1918"></a> 
											<input name="blockpriv" type="checkbox" id="blockpriv" value="yes" <?php if ($pconfig['blockpriv']) echo "checked"; ?>>
											<strong>阻止私有网络</strong><br>
											选中该选项会阻止RFC 1918定义的私有网络地址(10/8, 172.16/12, 192.168/16 127/8) 对该接口的访问。
											一般情况下，您需要在WAN上打开这个选项。
										</td>
									</tr>
                                    <tr>
                                        <td valign="middle" class="vncell">&nbsp;</td>
                                        <td class="vtable"> 
                                            <input name="blockbogons" type="checkbox" id="blockbogons" value="yes" <?php if ($pconfig['blockbogons']) echo "checked"; ?>>
                                            <strong>阻止无效网络</strong><br>
                                            选中该选项会阻止一些保留地址或IANA未定义的地址对该接口的访问。
                                            这些无效的地址不会在internet路由表中出现，也不应该作为源地址出现在你接收到的包中。
                                        </td>
                                    </tr>
                                    <tr>
                                        <td valign="middle" class="vncell">&nbsp;</td>
                                        <td class="vtable"> 
                                            <input name="blockouter" type="checkbox" id="blockouter" value="yes" <?php if ($pconfig['blockouter']) echo "checked"; ?>>
                                            <strong>阻止外部访问</strong><br>
                                            选中该选项会阻止外部网络对网关的访问。通常在WAN上打开这个选项。
                                        </td>
                                    </tr>
									<? endif; ?>
								</tr>
				</table>
				</div>
				<table width="100%" border="0" cellpadding="6" cellspacing="0">
								<tr>
									<td width="100" valign="top">
										&nbsp;
									</td>
									<td>
										<br/>
										<input id="save" name="Submit" type="submit" class="formbtn" value="保存"> 
										<input id="cancel" type="button" class="formbtn" value="取消" onclick="history.back()">
										<input name="if" type="hidden" id="if" value="<?=$if;?>">
									</td>
								</tr>
							</table>
						</td>
					</table>
				</form>
			</div>
				<script type="text/javascript">
					var gatewayip;
					var name;
					function show_add_gateway() {
						document.getElementById("addgateway").style.display = '';
						document.getElementById("addgwbox").style.display = 'none';
						document.getElementById("gateway").style.display = 'none';
						document.getElementById("save").style.display = 'none';
						document.getElementById("cancel").style.display = 'none';
						document.getElementById("gwsave").style.display = '';
						document.getElementById("gwcancel").style.display = '';
						$('notebox').innerHTML="";
					}
					function hide_add_gateway() {
						document.getElementById("addgateway").style.display = 'none';
						document.getElementById("addgwbox").style.display = '';	
						document.getElementById("gateway").style.display = '';
						document.getElementById("save").style.display = '';
						document.getElementById("cancel").style.display = '';
						document.getElementById("gwsave").style.display = '';
						document.getElementById("gwcancel").style.display = '';
					}
					function hide_add_gatewaysave() {
						document.getElementById("addgateway").style.display = 'none';
						$('status').innerHTML = '<img src="/themes/metallic/images/misc/loader.gif"> One moment please...';
						var iface = $F('if');
						name = $('name').getValue();
						var descr = $('gatewaydescr').getValue();
						gatewayip = $('gatewayip').getValue();
						addrtype = $('addrtype').getValue();
						var defaultgw = $('defaultgw').getValue();
						var url = "system_gateways_edit.php";
						var pars = 'isAjax=true&defaultgw=' + escape(defaultgw) + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip) + '&type=' + escape(addrtype);
						var myAjax = new Ajax.Request(
							url,
							{
								method: 'post',
								parameters: pars,
								onFailure: report_failure,
								onComplete: save_callback
							});	
					}
					function addOption(selectbox,text,value)
					{
						var optn = document.createElement("OPTION");
						optn.text = text;
						optn.value = value;
						selectbox.options.add(optn);
						selectbox.selectedIndex = (selectbox.options.length-1);
						$('notebox').innerHTML="<p/><strong>NOTE:</strong> You can manage Gateways <a target='_new' href='system_gateways.php'>here</a>.";
					}				
					function report_failure() {
						alert("Sorry, we could not create your gateway at this time.");
						hide_add_gateway();
					}
					function save_callback(transport) {
						var response = transport.responseText;
						if(response) {
							document.getElementById("addgateway").style.display = 'none';
							hide_add_gateway();
							$('status').innerHTML = '';
							addOption($('gateway'), name, name);
							// Auto submit form?
							//document.iform.submit();
							//$('status').innerHTML = '<img src="/themes/metallic/images/misc/loader.gif">';
						} else {
							report_failure();
						}
					}
					<?php
					if ($if == "wan" || $if == "lan")
						echo "\$('allcfg').show();";
					else
						echo "show_allcfg(document.iform.enable);";
					echo "updateType('{$pconfig['type']}')";
					?>
				</script>
				<?php include("fend.inc"); ?>
		</body>
</html>
